home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 722 / 722.xpi / chrome / noscript.jar / content / noscript / SMUninstaller.js < prev    next >
Text File  |  2010-02-12  |  4KB  |  120 lines

  1. var SMUninstaller = {
  2.   log: function(msg) {
  3.     dump("[" + EXTENSION_NAME + "] " + msg + "\n");
  4.   },
  5.   
  6.   check: function() {
  7.     this._uninstall("UChrm", EXTENSION_NAME + " Installation",
  8.       EXTENSION_NAME + " detected a previous installation inside your profile and removed it.\n" +
  9.       "SeaMonkey is being closed again to complete the installation process.\n" +
  10.       EXTENSION_NAME +  " will be available as soon as you restart SeaMonkey.");
  11.   },
  12.   
  13.   prompter: CC["@mozilla.org/embedcomp/prompt-service;1"
  14.             ].getService(CI.nsIPromptService),
  15.   
  16.   appUninstall: function(window) {
  17.     if (this.prompter.confirm(window, "Uninstalling " + EXTENSION_NAME,
  18.       "Are you sure you want to uninstall " + EXTENSION_NAME +
  19.       "?\n(SeaMonkey will need to be closed)")) {
  20.       this._uninstall("AChrom", EXTENSION_NAME + " Uninstalled", "SeaMonkey is about to be closed.\nWhen you restart it, " +
  21.                      EXTENSION_NAME + " will be gone.");
  22.       if (window) window.close();
  23.     }
  24.   },
  25.   
  26.   _uninstall: function(dir, title, message) {
  27.     
  28.     try {
  29.       var pChrome = CC["@mozilla.org/file/directory_service;1"].getService(CI.nsIProperties).get(dir, CI.nsIFile).clone();
  30.       
  31.       pChrome.append("chrome.rdf");
  32.       var chromeReg = IO.readFile(pChrome);
  33.       
  34.       var dirty = new RegExp('<RDF:Description RDF:about="urn:mozilla:package:' + CHROME_NAME + '"[^>]*c:extension="true"').test(chromeReg);
  35.       if (!dirty) return;
  36.       var rx = new RegExp('<RDF:Description RDF:about="urn:mozilla:[^"]+:' + CHROME_NAME +
  37.           '"[\\s\\S]*?</RDF:Description>|<RDF:li RDF:resource="urn:mozilla:[^"]+:' + CHROME_NAME + '"/>',
  38.         'g');
  39.       this.log("Removing " + rx.source + " in " + pChrome.path);
  40.       chromeReg = chromeReg.replace(rx, '');
  41.     } catch(e) {
  42.       this.log(e);
  43.     }
  44.     
  45.     
  46.     var self = this;
  47.  
  48.     CC['@mozilla.org/observer-service;1'].getService(CI.nsIObserverService)
  49.         .notifyObservers(CC["@mozilla.org/chrome/chrome-registry;1"]
  50.                        .getService(CI.nsIChromeRegistrySea),
  51.                        "chrome-flush-caches", null);
  52.  
  53.     singleton.delayExec(function() {
  54.       try {
  55.        
  56.         var appStartup = CC["@mozilla.org/toolkit/app-startup;1"].getService(CI.nsIAppStartup);
  57.         
  58.          
  59.         self.log("Patching the chrome registry");
  60.         IO.safeWriteFile(pChrome, chromeReg);
  61.         
  62.         var rx = new RegExp('<RDF:li>chrome://' + CHROME_NAME + '/[^<]+</RDF:li>', 'g');
  63.         
  64.         ["overlays", "stylesheets"].forEach(function(f) {
  65.           try {
  66.             var cf  = pChrome.parent;
  67.             cf.append(f + ".rdf");
  68.             if (cf.exists()) {
  69.               var content = IO.readFile(cf);
  70.               self.log("Removing " + rx.source + " in " + cf.path);
  71.               var patched = content.replace(rx, '');
  72.               if (content != patched) {
  73.                  self.log("Writing " + patched);
  74.                 IO.safeWriteFile(cf, patched);
  75.               }
  76.             }
  77.           } catch(e) {
  78.             self.log("Error patching " + f + ": " + e);
  79.           }
  80.         });
  81.         
  82.         try {
  83.           var jar = pChrome.parent;
  84.           jar.append(CHROME_NAME + ".jar");
  85.           jar.remove(false);
  86.         } catch(e) {}
  87.         
  88.         try {
  89.           var cmp = pChrome.parent.parent;
  90.           cmp.append("components");
  91.           cmp.append(CHROME_NAME + "Service.js");
  92.           cmp.remove(false);
  93.         } catch(e) {}
  94.         
  95.         
  96.         
  97.         var offline = IOS.offline;
  98.         IOS.offline = true;
  99.         
  100.         var window = DOM.mostRecentBrowserWindow;
  101.         self.prompter.alert(
  102.             window, title, message
  103.           );
  104.         
  105.        
  106.         
  107.         self.log("Quit");
  108.         
  109.         IOS.offline = offline;
  110.         
  111.         appStartup.quit(appStartup.eForceQuit);
  112.         
  113.       } catch(e) {
  114.         self.log(e);
  115.       }
  116.     
  117.     }, 10);
  118.   }
  119. }
  120. singleton.smUninstaller = SMUninstaller;